package Utilerias;
import java.awt.Desktop;
import java.io.*;
import java.sql.*;
import org.apache.poi.hssf.usermodel.*;
import java.util.*;
import javax.swing.JOptionPane;

public class CEXCELEscritor
{
   private Connection connection =null;
   
   public CEXCELEscritor(String database,String user,String password)
         throws ClassNotFoundException,SQLException
   {
      Class.forName("com.mysql.jdbc.Driver");
      String url="jdbc:mysql://localhost/"+database;
      connection=DriverManager.getConnection(url,user,password);
   }
   
   public void generarXls(String tablename,String filename) throws SQLException,FileNotFoundException,IOException
   {
      // PRIMERO CREAMOS UN NUEVO LIBRO DE EXCEL Y UNA NUEVA HOJA 
      HSSFWorkbook xlsWorkbook=new HSSFWorkbook();
      HSSFSheet xlsSheet=xlsWorkbook.createSheet();
      short rowIndex=0;
      // EJECUTAMOS NUESTRO QUERY
      PreparedStatement stmt= connection.prepareStatement("select * from "+tablename);
      ResultSet rs=stmt.executeQuery();
      // TOMA LA LISTA DE DATOS
      // FILA DE TITULO
      ResultSetMetaData colInfo=rs.getMetaData();
      List<String> colNames=new ArrayList<String>();
      HSSFRow titleRow=xlsSheet.createRow(rowIndex++);
      for(int i=1; i<=colInfo.getColumnCount(); i++)
      {
         colNames.add(colInfo.getColumnName(i));
         titleRow.createCell((short)(i-1)).setCellValue(
               new HSSFRichTextString(colInfo.getColumnName(i)));
         xlsSheet.setColumnWidth((short)(i-1),(short)4000);
      }
      // GUARDAMOS LOS DATOS
      while(rs.next())
      {
         HSSFRow dataRow=xlsSheet.createRow(rowIndex++);
         short colIndex=0;
         for(String colName: colNames)
         {
            dataRow.createCell(colIndex++).setCellValue(
                  new HSSFRichTextString(rs.getString(colName)));
         }
      }
      // HACEMOS EL ARCHIVO
      xlsWorkbook.write(new FileOutputStream(filename));
      try
      {
         Desktop.getDesktop().open(new File(filename));
      }
      catch(Exception e)
      {
         JOptionPane.showMessageDialog(null,"No se puede mostrar el archivo: "+filename);
      }
   }
   
   // CERRRAMOS CONEXION
   public void cerrar() throws SQLException
   {
      connection.close();
   }
   
}